<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>28.2. Creation of Measurements</title>
<link rel="stylesheet" href="dbstyle.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.72.0">
<link rel="start" href="index.html" title="Programmer's Reference Guide">
<link rel="up" href="zend.measure.html" title="Chapter 28. Zend_Measure">
<link rel="prev" href="zend.measure.html" title="Chapter 28. Zend_Measure">
<link rel="next" href="zend.measure.output.html" title="28.3. Outputting measurements">
<link rel="chapter" href="introduction.html" title="Chapter 1. Introduction to Zend Framework">
<link rel="chapter" href="zend.acl.html" title="Chapter 2. Zend_Acl">
<link rel="chapter" href="zend.auth.html" title="Chapter 3. Zend_Auth">
<link rel="chapter" href="zend.cache.html" title="Chapter 4. Zend_Cache">
<link rel="chapter" href="zend.config.html" title="Chapter 5. Zend_Config">
<link rel="chapter" href="zend.console.getopt.html" title="Chapter 6. Zend_Console_Getopt">
<link rel="chapter" href="zend.controller.html" title="Chapter 7. Zend_Controller">
<link rel="chapter" href="zend.currency.html" title="Chapter 8. Zend_Currency">
<link rel="chapter" href="zend.date.html" title="Chapter 9. Zend_Date">
<link rel="chapter" href="zend.db.html" title="Chapter 10. Zend_Db">
<link rel="chapter" href="zend.debug.html" title="Chapter 11. Zend_Debug">
<link rel="chapter" href="zend.dojo.html" title="Chapter 12. Zend_Dojo">
<link rel="chapter" href="zend.dom.html" title="Chapter 13. Zend_Dom">
<link rel="chapter" href="zend.exception.html" title="Chapter 14. Zend_Exception">
<link rel="chapter" href="zend.feed.html" title="Chapter 15. Zend_Feed">
<link rel="chapter" href="zend.filter.html" title="Chapter 16. Zend_Filter">
<link rel="chapter" href="zend.form.html" title="Chapter 17. Zend_Form">
<link rel="chapter" href="zend.gdata.html" title="Chapter 18. Zend_Gdata">
<link rel="chapter" href="zend.http.html" title="Chapter 19. Zend_Http">
<link rel="chapter" href="zend.infocard.html" title="Chapter 20. Zend_InfoCard">
<link rel="chapter" href="zend.json.html" title="Chapter 21. Zend_Json">
<link rel="chapter" href="zend.layout.html" title="Chapter 22. Zend_Layout">
<link rel="chapter" href="zend.ldap.html" title="Chapter 23. Zend_Ldap">
<link rel="chapter" href="zend.loader.html" title="Chapter 24. Zend_Loader">
<link rel="chapter" href="zend.locale.html" title="Chapter 25. Zend_Locale">
<link rel="chapter" href="zend.log.html" title="Chapter 26. Zend_Log">
<link rel="chapter" href="zend.mail.html" title="Chapter 27. Zend_Mail">
<link rel="chapter" href="zend.measure.html" title="Chapter 28. Zend_Measure">
<link rel="chapter" href="zend.memory.html" title="Chapter 29. Zend_Memory">
<link rel="chapter" href="zend.mime.html" title="Chapter 30. Zend_Mime">
<link rel="chapter" href="zend.openid.html" title="Chapter 31. Zend_OpenId">
<link rel="chapter" href="zend.paginator.html" title="Chapter 32. Zend_Paginator">
<link rel="chapter" href="zend.pdf.html" title="Chapter 33. Zend_Pdf">
<link rel="chapter" href="zend.registry.html" title="Chapter 34. Zend_Registry">
<link rel="chapter" href="zend.rest.html" title="Chapter 35. Zend_Rest">
<link rel="chapter" href="zend.search.lucene.html" title="Chapter 36. Zend_Search_Lucene">
<link rel="chapter" href="zend.server.html" title="Chapter 37. Zend_Server">
<link rel="chapter" href="zend.service.html" title="Chapter 38. Zend_Service">
<link rel="chapter" href="zend.session.html" title="Chapter 39. Zend_Session">
<link rel="chapter" href="zend.soap.html" title="Chapter 40. Zend_Soap">
<link rel="chapter" href="zend.test.html" title="Chapter 41. Zend_Test">
<link rel="chapter" href="zend.text.html" title="Chapter 42. Zend_Text">
<link rel="chapter" href="zend.timesync.html" title="Chapter 43. Zend_TimeSync">
<link rel="chapter" href="zend.translate.html" title="Chapter 44. Zend_Translate">
<link rel="chapter" href="zend.uri.html" title="Chapter 45. Zend_Uri">
<link rel="chapter" href="zend.validate.html" title="Chapter 46. Zend_Validate">
<link rel="chapter" href="zend.version.html" title="Chapter 47. Zend_Version">
<link rel="chapter" href="zend.view.html" title="Chapter 48. Zend_View">
<link rel="chapter" href="zend.xmlrpc.html" title="Chapter 49. Zend_XmlRpc">
<link rel="appendix" href="requirements.html" title="Appendix A. Zend Framework Requirements">
<link rel="appendix" href="coding-standard.html" title="Appendix B. Zend Framework Coding Standard for PHP">
<link rel="appendix" href="copyrights.html" title="Appendix C. Copyright Information">
<link rel="index" href="the.index.html" title="Index">
<link rel="subsection" href="zend.measure.creation.html#zend.measure.creation.number" title="28.2.1. Creating measurements from integers and floats">
<link rel="subsection" href="zend.measure.creation.html#zend.measure.creation.string" title="28.2.2. Creating measurements from strings">
<link rel="subsection" href="zend.measure.creation.html#zend.measure.creation.localized" title="28.2.3. Measurements from localized strings">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="navheader"><table width="100%" summary="Navigation header">
<tr><th colspan="3" align="center">28.2. Creation of Measurements</th></tr>
<tr>
<td width="20%" align="left">
<a accesskey="p" href="zend.measure.html">Prev</a> </td>
<th width="60%" align="center">Chapter 28. Zend_Measure</th>
<td width="20%" align="right"> <a accesskey="n" href="zend.measure.output.html">Next</a>
</td>
</tr>
</table></div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="zend.measure.creation"></a>28.2. Creation of Measurements</h2></div></div></div>
<p>
        When creating a measurement object, <code class="code">Zend_Measure_*</code> methods expect the input/original measurement
        data value as the first parameter. This can be a
        <a href="zend.measure.creation.html#zend.measure.creation.number" title="28.2.1. Creating measurements from integers and floats"><code class="code">numeric argument</code>
        </a>
        , a
        <a href="zend.measure.creation.html#zend.measure.creation.string" title="28.2.2. Creating measurements from strings"><code class="code">string</code>
        </a>
        without units, or a
        <a href="zend.measure.creation.html#zend.measure.creation.localized" title="28.2.3. Measurements from localized strings"><code class="code">localized string</code> with unit(s) specified.
        </a>
        The second parameter defines the type of the measurement. Both parameters are mandatory. The language may
        optionally be specified as the third parameter.
    </p>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="zend.measure.creation.number"></a>28.2.1. Creating measurements from integers and floats</h3></div></div></div>
<p>
            In addition to integer data values, floating point types may be used, but
            <a href="http://www.php.net/float" target="_top">"simple decimal fractions like 0.1 or 0.7 cannot be converted into their internal binary counterparts without a little loss of precision,"</a>
            sometimes giving surprising results. Also, do not compare two "float" type numbers for equality.
        </p>
<div class="example">
<a name="zend.measure.creation.number.example-1"></a><p class="title"><b>Example 28.3. Creation using integer and floating values</b></p>
<div class="example-contents"><pre class="programlisting">&lt;?php
require_once 'Zend/Measure/Length.php';

$measurement = 1234.7;
$unit = new Zend_Measure_Length((integer)$measurement, Zend_Measure_Length::STANDARD);
echo $unit;
// outputs '1234 m' (meters)

$unit = new Zend_Measure_Length($measurement, Zend_Measure_Length::STANDARD);
echo $unit;
// outputs '1234.7 m' (meters)
            </pre></div>
</div>
<br class="example-break">
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="zend.measure.creation.string"></a>28.2.2. Creating measurements from strings</h3></div></div></div>
<p>
            Many measurements received as input to ZF applications can only be passed to <code class="code">Zend_Measure_*</code>
            classes as strings, such as numbers written using
            <a href="http://en.wikipedia.org/wiki/Roman_numerals" target="_top">roman numerals</a>
            or extremely large binary values that exceed the precision of PHP's native integer and float types. Since
            integers can be denoted using strings, if there is any risk of losing precision due to limitations of PHP's
            native integer and float types, using strings instead. <code class="code">Zend_Measure_Number</code> uses the BCMath
            extension to support arbitrary precision, as shown in the example below, to avoid limitations in many PHP
            functions, such as
            <a href="http://php.net/bin2dec" target="_top"><code class="code">bin2dec()</code>
            </a>
            .
        </p>
<div class="example">
<a name="zend.measure.creation.string.example-1"></a><p class="title"><b>Example 28.4. Creation using strings</b></p>
<div class="example-contents"><pre class="programlisting">&lt;?php
require_once 'Zend/Measure/Number.php';

$mystring = "10010100111010111010100001011011101010001";
$unit = new Zend_Measure_Number($mystring, Zend_Measure_Number::BINARY);

echo $unit;
            </pre></div>
</div>
<br class="example-break"><p>
            Usually, <code class="code">Zend_Measure_*</code> can automatically extract the desired measurement embedded in an
            arbitrary string. Only the first identifiable number denoted using standard European/Latin digits
            (0,1,2,3,4,5,6,7,8,9) will be used for measurement creation. If there are more numerals later in the string,
            the rest of these numerals will be ignored.
        </p>
<div class="example">
<a name="zend.measure.creation.string.example-2"></a><p class="title"><b>Example 28.5. Arbitrary text input containing measurements</b></p>
<div class="example-contents"><pre class="programlisting">&lt;?php
require_once 'Zend/Measure/Area.php';

$mystring = "My house is 125m² in size";
$unit = new Zend_Measure_Area($mystring, Zend_Measure_Area::STANDARD);
echo $unit; // outputs "125 m²in size";

$mystring = "My house is 125m² in size, it has 5 rooms of 25m² each.";
$unit = new Zend_Measure_Area($mystring, Zend_Measure_Area::STANDARD);
echo $unit; // outputs "125 m² in size";
            </pre></div>
</div>
<br class="example-break">
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="zend.measure.creation.localized"></a>28.2.3. Measurements from localized strings</h3></div></div></div>
<p>
            When a string is entered in a localized notation, the correct interpretation can not be determined without
            knowing the intended locale. The division of decimal digits with "." and grouping of thousands with "," is
            common in the English language, but not so in other languages. For example, the English number "1,234.50"
            would be interpreted as meaning "1.2345" in German. To deal with such problems, the locale-aware
            <code class="code">Zend_Measure_*</code> family of classes offer the possibility to specify a language or region to
            disambiguate the input data and properly interpret the intended semantic value.
        </p>
<div class="example">
<a name="zend.measure.creation.localized.example-1"></a><p class="title"><b>Example 28.6. Localized string</b></p>
<div class="example-contents"><pre class="programlisting">&lt;?php
require_once 'Zend/Measure/Length.php';

$locale = new Zend_Locale('de');
$mystring = "The boat is 1,234.50 long.";
$unit = new Zend_Measure_Length($mystring, Zend_Measure_Length::STANDARD, $locale);
echo $unit; // outputs "1.234 m"


$mystring = "The boat is 1,234.50 long.";
$unit = new Zend_Measure_Length($mystring, Zend_Measure_Length::STANDARD, 'en_US');
echo $unit; // outputs "1234.50 m"
            </pre></div>
</div>
<br class="example-break">
</div>
</div>
<div class="navfooter"><table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left">
<a accesskey="p" href="zend.measure.html">Prev</a> </td>
<td width="20%" align="center"><a accesskey="u" href="zend.measure.html">Up</a></td>
<td width="40%" align="right"> <a accesskey="n" href="zend.measure.output.html">Next</a>
</td>
</tr>
<tr>
<td width="40%" align="left" valign="top">Chapter 28. Zend_Measure </td>
<td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td>
<td width="40%" align="right" valign="top"> 28.3. Outputting measurements</td>
</tr>
</table></div>
<div class="revinfo"></div>
</body>
</html>
